package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
 * JDBC入门案例
 */
public class TestJDBC {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //1.加载驱动 (类似于 电脑加载鼠标/键盘的驱动)
        /**
         * Class.forName("com.mysql.jdbc.Driver") 作用只是加载Driver类并没有加载驱动
         * 实现加载驱动的功能则是在Driver类的该行DriverManager.registerDriver(new Driver());
         * Class.forName(); 该功能可以根据传入的类的全包名,实现加载该类
         */
        Class.forName("com.mysql.jdbc.Driver");
        //2.获取连接
        /**
         * URL的组成
         * 1. jdbc:mysql  ->表示遵循的协议是jdbc协议  子协议为mysql
         * 2. localhost:3306 -> IP 是本机  端口号 3306
         * 3. tedu -> 表示连接到数据库服务器后具体要使用数据库是tedu
         * 4. ?右侧指的是参数部分
         *    .1 useUnicode=true  -> 表示使用的是Unicode的编码格式
         *    .2 characterEncoding=utf8 ->表示使用的是UTF8编码
         *    .3 serverTimezone=Asia/Shanghai ->表示设置时区
         */
        String url = "jdbc:mysql://localhost:3306/tedu?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai";
        String username = "root";
        String password = "root";
        //getConnection(1.url,2.用户名 3.密码)
        //如果连接成功,getConnection 会返回给我们一个连接器对象
        Connection conn = DriverManager.getConnection(url, username, password);
        System.out.println("连接成功!获取的连接器对象是: "+conn);
        //3. 创建传输器对象   类似与IO中的管道概念 作用就是传输数据
        String sql = "INSERT INTO location(id,name) VALUES(NULL,'神之国度')";
        //conn.prepareStatement 传入sql后会
        // 返回给我们一个传输器对象
        PreparedStatement ps = conn.prepareStatement(sql);
        //执行下传输器对象的executeUpdate方法
        /**
         *  executeUpdate() 适用于增删改的sql传输!  返回的值是int 代表受影响的行数
         *  executeQuery()  适用于查询的sql传输!  返回的是一个结果集对象(封装了所有查询到的信息)
         */
        //4. 执行sql
        int rows = ps.executeUpdate();
        System.out.println("执行了插入操作,插入了 " + rows+" 行数据");
        //5. 释放资源  原则  越早创建的对象,越晚关闭
        ps.close();
        conn.close();
    }
}
